package com.chezhujie.www.service;

import java.util.List;
import java.util.Map;
import java.util.HashMap;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.chezhujie.www.core.page.Pagination;
import com.chezhujie.www.domain.Czjawardon;
import com.chezhujie.www.domain.Czjawardstock;
import com.chezhujie.www.domain.Czjawarduse;
import com.chezhujie.www.domain.vo.CzjawarduseALLMessage;
import com.chezhujie.www.domain.vo.CzjawarduseNameVO;
import com.chezhujie.www.domain.vo.CzjawarduseVO;
import com.chezhujie.www.domain.vo.CzjawarduseVO1;
import com.chezhujie.www.persistence.CzjawarduseMapper;
import com.chezhujie.www.utils.UUIDUtils;


@Service("czjawarduseService")
public class CzjawarduseService {
	@Autowired
	private CzjawarduseMapper czjawarduseMapper;
	
	@Resource
	private CzjawardstockService czjawardstockService;
	
	@Resource 
	private CzjawardonService czjawardonService;

	/**
	 * 查询某个czj_awarduser 奖品用户
	 * @param param
	 * @return
	 * 
	 */
	public Czjawarduse getCzjawarduse(Map<String,Object> param) {
		return czjawarduseMapper.getCzjawarduse(param);
	}
	
	/**
	 * 查询某个czj_awarduser 奖品用户
	 * @param param
	 * @return
	 * 
	 */
	public CzjawarduseALLMessage getCzjawarduseALLMessage(Map<String,Object> param) {
		return czjawarduseMapper.getCzjawarduseALLMessage(param);
	}	
	
	
	
	/**
	 * 查询某个czj_awarduser 奖品用户
	 * @param param
	 * @return
	 */
	public CzjawarduseVO1 getCzjawarduseVO1(Map<String,Object> param) {
		return czjawarduseMapper.getCzjawarduseVO1(param);
	}	
	
	/**
	 * 查询某个czj_awarduser 奖品用户
	 * @param param
	 * @return
	 */
	public Czjawarduse getCzjawarduseExistence(Map<String,Object> param) {
		return czjawarduseMapper.getCzjawarduseExistence(param);
	}	
   
	/**
	 * 查询czj_awarduser 奖品用户列表
	 * @return
	 */
	public Map<String,Object> getCzjawarduseList(Map<String,Object> param) {
		Map<String,Object> returnMap = new HashMap<String,Object>();
		returnMap.put("totalCounts", czjawarduseMapper.getTotalRows(param));
		returnMap.put("list", czjawarduseMapper.getCzjawarduseList(param));
		return returnMap;
	}
   
	/**
	 * 查询czj_awarduser 奖品用户列表
	 * @return
	 */
	public  Pagination getCzjawarduseList(Map<String,Object> param,int pageSize,Integer pageNo,String order,String sort) {
		Pagination p = new Pagination();
		p.setPageNo(pageNo);
		p.setPageSize(pageSize);
		p.setOrder(order);
		p.setSort(sort);
		param.putAll(p.toMap());
		int count=czjawarduseMapper.getTotalRows(param);
		List<Czjawarduse> list=	czjawarduseMapper.getCzjawarduseList(param);
	
		p.setList(list);
		p.setTotalCount(count);
		return p;
		
	}
	
	/**
	 * 查询czj_awarduser 奖品用户列表
	 * @return
	 */
	public  Pagination getCzjawarduseListName(Map<String,Object> param,int pageSize,Integer pageNo,String order,String sort) {
		Pagination p = new Pagination();
		p.setPageNo(pageNo);
		p.setPageSize(pageSize);
		p.setOrder(order);
		p.setSort(sort);
		param.putAll(p.toMap());
		int count=czjawarduseMapper.getTotalRowsName(param);
		List<CzjawarduseNameVO> list=	czjawarduseMapper.getCzjawarduseListName(param);
	
		p.setList(list);
		p.setTotalCount(count);
		return p;
		
	}	
	
	/**
	 * 查询czj_awarduser 奖品用户列表
	 * @return
	 */
	public  Pagination getCzjawarduseListAll(Map<String,Object> param,int pageSize,Integer pageNo,String order,String sort) {
		Pagination p = new Pagination();
		p.setPageNo(pageNo);
		p.setPageSize(pageSize);
		p.setOrder(order);
		p.setSort(sort);
		param.putAll(p.toMap());
		int count=czjawarduseMapper.getTotalRowsAll(param);
		List<CzjawarduseVO> list=	czjawarduseMapper.getCzjawarduseListAll(param);
	
		p.setList(list);
		p.setTotalCount(count);
		return p;
		
	}	
      
	/**
	 * 新增czj_awarduser 奖品用户
	 * @param czjawarduse
	 */
	@Transactional
	public void insertCzjawarduse(Czjawarduse czjawarduse) {
		czjawarduse.setAwarduseId(UUIDUtils.getUUID());
		czjawarduseMapper.insertCzjawarduse(czjawarduse);
	}
   
	/**
	 * 编辑czj_awarduser 奖品用户
	 * @param czjawarduse
	 */
	@Transactional
	public void updateCzjawarduse(Czjawarduse czjawarduse) {
		czjawarduseMapper.updateCzjawarduse(czjawarduse);
	}
   
	/**
	 * 删除czj_awarduser 奖品用户
	 */
	@Transactional
	public void deleteCzjawarduse(List<String> awarduseIdList) {
		for(String awarduseId: awarduseIdList){
	  		Map<String,Object> param = new HashMap<String,Object>();
	  		param.put("awarduseId", awarduseId);
	  		
	  	   Czjawarduse czjawarduse = czjawarduseMapper.getCzjawarduse(param);
	  		
	  		Map<String,Object> czjawardonParam = new HashMap<String,Object>();
	  		czjawardonParam.put("awardonId", czjawarduse.getAwardonId());
	  	   
	  	   Czjawardon czjawardon = czjawardonService.getCzjawardon(czjawardonParam);
	  	   if(czjawardon!=null){
	  		   Integer num = czjawardon.getExt3() -1;
	  		   czjawardon.setExt3(num);
	  		   czjawardonService.updateCzjawardon(czjawardon);
	  	   }
	  	   
	  		Map<String,Object> czjawardstocParam = new HashMap<String,Object>();
	  		czjawardstocParam.put("awardstockId", czjawarduse.getAwardId());
	  	   Czjawardstock czjawardstock = czjawardstockService.getCzjawardstock(czjawardstocParam);
	  	   if(czjawardstock!=null){
	  		 Integer num = czjawardstock.getZhongjiangnum() -1;
	  		czjawardstock.setZhongjiangnum(num);
	  		czjawardstockService.updateCzjawardstock(czjawardstock);
	  	   }	  	   	  	   
	 	   czjawarduseMapper.deleteCzjawarduse(param);	  		
		}
	}


    public Czjawarduse queryById(String awarduseId) {
		return czjawarduseMapper.queryById(awarduseId);
	}


    public Pagination getAwardList(Map<String, Object> param, Integer pageSize, Integer pageNo, String sort, String order) {
		if(pageSize==null){
			pageSize = 20;
		}
		if(pageNo==null){
			pageNo = 1;
		}
		Pagination p = new Pagination();
		p.setPageNo(pageNo);
		p.setPageSize(pageSize);
		p.setOrder(order);
		p.setSort(sort);
		param.putAll(p.toMap());
		int count=czjawarduseMapper.getAwardListTotalRows(param);
		List<Map<String,Object>> list=	czjawarduseMapper.getAwardList(param);

		p.setList(list);
		p.setTotalCount(count);
		return p;
    }
}